home *** CD-ROM | disk | FTP | other *** search
/ Wired for Sound Pro / Wired for Sound Pro CD (Aristosoft, Inc.) (1993).ISO / wfsound.mst < prev   
Text File  |  1993-11-01  |  20KB  |  822 lines

  1. '**************************************************************************
  2. '*                Wired for Sound Pro CD Install Script
  3. '*     version 1.2 CD   by Aaron Wallace  (c) 1993 Aristosoft, Inc
  4. '**************************************************************************
  5.  
  6. '' Define DEBUG for script debugging
  7.  
  8. '$INCLUDE 'setupapi.inc'
  9. '$INCLUDE 'msdetect.inc'
  10.  
  11. ''Dialog ID's
  12. CONST WELCOME      = 100
  13. CONST ASKQUIT      = 200
  14. CONST DESTPATH     = 300
  15. CONST EXITFAILURE  = 400
  16. CONST EXITQUIT     = 600
  17. CONST EXITSUCCESS  = 700
  18. CONST WHICHINST    = 800
  19. CONST APPHELP      = 900
  20. CONST WHICHINSTHLP = 910
  21. CONST SETOWNER       = 1000
  22. CONST TESTSOUND    = 1100
  23. CONST INSTALLDRV   = 1200
  24. CONST SOUNDPLAYED  = 1300
  25. CONST WAITDLG       = 1400
  26. CONST EXITREBOOT   = 1500
  27. CONST BBD1       = 5000
  28. CONST BBD2       = 5010
  29. CONST BBD3       = 5020
  30. CONST BBD4       = 5030
  31. CONST BBD5       = 5040
  32. CONST BBD6       = 5050
  33. CONST SOUNDSDLG    = 5200
  34. CONST TAPPSDLG     = 5300
  35. CONST VOICESDLG    = 5400
  36. CONST CUSTINST     = 6200
  37. CONST TOOBIG       = 6300
  38. CONST BADPATH      = 6400
  39.  
  40. '' For message boxes
  41. CONST MB_YESNO=4
  42. CONST MB_RETRYCANCEL=5
  43. CONST IDNO=7
  44. CONST IDYES=6
  45. CONST IDRETRY=4
  46. CONST IDCANCEL=2
  47.  
  48. ''Bitmap ID
  49. CONST LOGO         = 1
  50.  
  51. ''File Types
  52. CONST BASEFILES     = 1
  53. CONST TAPPFILES     = 2
  54. CONST SOUNDFILES    = 3
  55. CONST VOICEFILES    = 4
  56. CONST MAX_TYPES     = 4
  57.  
  58. ''Install directories, etc.
  59. GLOBAL DEST$        ''Default destination directory.
  60. GLOBAL WINDRIVE$    ''Windows drive letter.
  61. GLOBAL CUIDLL$        ''CUI DLL
  62. GLOBAL WINDIR$        ''Windows directory
  63. GLOBAL SYSDIR$        ''System directory
  64. GLOBAL WININI$        ''"win.ini"
  65. GLOBAL SYSINI$        ''GetWindowsDir() + "system.ini"
  66.  
  67. '' User info
  68. GLOBAL OWNER$        '' Product registered owner
  69. GLOBAL WORKPLACE$   '' Company or such
  70.  
  71. ''Install item lists
  72. GLOBAL BASE$        ''List of base files
  73. GLOBAL TAPPS$       ''List of all talking apps
  74. GLOBAL SOUNDS$      ''List of all sounds.
  75. GLOBAL VOICES$      ''List of available voices
  76.  
  77. GLOBAL BASEINST$    ''List of base files to install
  78. GLOBAL TAPPSINST$   ''List of Talking Apps to install
  79. GLOBAL SOUNDSINST$  ''List of sounds to install
  80. GLOBAL VOICESINST$  ''List of voices to install
  81.  
  82. ''Custom Install list symbol names
  83. GLOBAL BASENEEDS$   ''Option list costs per drive
  84. GLOBAL TAPPNEEDS$
  85. GLOBAL SOUNDNEEDS$
  86. GLOBAL VOICENEEDS$
  87. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  88.  
  89. ''Custom Install dialog list symbol names
  90. GLOBAL CHECKSTATES$ ''List of check box values
  91. GLOBAL STATUSTEXT$  ''List of values to initialize status items
  92. GLOBAL DRIVETEXT$   ''Drive space info, etc.
  93.  
  94. '' Install DSOUND
  95. GLOBAL INSTDSOUND%
  96.  
  97. '' Customize product
  98. GLOBAL CUSTOMIZE%
  99.  
  100. '' Test sound hardware
  101. GLOBAL DOTEST%
  102.  
  103. GLOBAL WFSFOUND%
  104. GLOBAL CUSTINSTALL%
  105.  
  106. '' Which type of install to perform, by default
  107. GLOBAL DEFINSTOPT$
  108.  
  109. ''Progman titles
  110. GLOBAL WFSAPP$        ''Name of WFS app
  111.  
  112. ''Win.ini [Aristosoft] install code
  113. GLOBAL INSTDIR$
  114.  
  115. ''Space requirements
  116. GLOBAL FITS%        '' > 0 if everything fits
  117.  
  118. DECLARE SUB RecalcOptFiles (ftype%)
  119. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  120. DECLARE FUNCTION GetWindowsVersionCorrectly& ()
  121. DECLARE FUNCTION MakeVer& (x as integer, y as integer)
  122. DECLARE FUNCTION StringInList (s$, y$) AS INTEGER
  123.  
  124. DECLARE FUNCTION sndPlaySound LIB "MMSYSTEM.DLL" (f$, fl%) AS INTEGER
  125. DECLARE FUNCTION GetModuleHandle LIB "KERNEL" (f$) AS INTEGER
  126.  
  127. DECLARE SUB Ctl3dRegister LIB "WFSUI.DLL" (f%)
  128. DECLARE SUB Ctl3dAutoSubclass LIB "WFSUI.DLL" (f%)
  129. DECLARE SUB Ctl3dUnregister LIB "WFSUI.DLL" (f%)
  130.  
  131. DECLARE SUB RemoveSectionFiles (dest$, sect$)
  132. DECLARE SUB RemDirectory (d$)
  133. DECLARE FUNCTION HasSoundDriver() AS INTEGER
  134. DECLARE SUB SendProgmanCommand LIB "CUI.DLL" (s$)
  135. DECLARE SUB KillFiles LIB "CUI.DLL" (s$)
  136.  
  137. '' These are defined in wfs.inc (product-specific)
  138. DECLARE SUB SetProductTitles
  139. DECLARE FUNCTION InfFile() AS STRING
  140. DECLARE FUNCTION MakeInstDir(D$) AS STRING
  141. DECLARE SUB AddInfSectionNames (BASE$, TAPPS$, SOUNDS$, VOICES$, BASEINST$, TAPPSINST$, SOUNDSINST$, VOICESINST$)
  142. DECLARE SUB RecalcPath
  143. DECLARE SUB AddOptFilesToCopyList (ftype%)
  144. DECLARE SUB SetDriveStatus
  145. DECLARE SUB AddOptFiles
  146. DECLARE SUB ConfigureApps
  147. DECLARE SUB AddBillboards
  148. DECLARE SUB DoUninstall
  149.  
  150.  
  151. '' This is where it all begins!
  152.  
  153. INIT:
  154.  
  155.     CUIDLL$ = "cui.dll"
  156.     DEFINSTOPT$ = "1"
  157.     INSTDSOUND% = 0
  158.     CUSTOMIZE% = -1
  159.     DOTEST% = -1
  160.  
  161.     SetProductTitles
  162.  
  163.     HELPPROC$ = "FHelpDlgProc"        ''Help dialog procedure
  164.  
  165.     SetBitmap CUIDLL$, LOGO
  166.  
  167.  
  168. '' We don't do Windows 3.0...
  169.  
  170.     If GetWindowsVersionCorrectly() < MakeVer(3, 10) Then
  171.     i% = DoMsgBox("This product requires Windows version 3.10 or greater", WFSAPP$, MB_OK)
  172.     GOTO DONEFINIFIN
  173.     End If
  174.  
  175. '' We don't want these DLLs to be loaded quite yet...
  176. LookAround:
  177.     IF GetModuleHandle("SNDAPI") OR GetModuleHandle("WFSABOUT") THEN
  178.     i% = DoMsgBox("Please quit all other Aristosoft products before continuing with Setup.", WFSAPP$, MB_RETRYCANCEL)
  179.     IF i% = IDRETRY THEN
  180.         GOTO LookAround
  181.     ELSEIF i% = IDCANCEL THEN
  182.         GOTO DONEFINIFIN
  183.     END IF
  184.     END IF
  185.  
  186.     HCUI% = GetModuleHandle("CUI")
  187.     Ctl3dRegister(HCUI%)
  188.     Ctl3dAutoSubclass(HCUI%)
  189.  
  190. ''Find location of INF file and create a default dest. dir
  191.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  192.     IF szInf$ = "" THEN
  193.     szInf$ = GetSymbolValue("STF_CWDDIR") + InfFile()
  194.     END IF
  195.  
  196.     '' Load the INF file
  197.     ReadInfFile szInf$
  198.  
  199.     '' Construct default strings
  200.     WINDIR$ = GetWindowsDir()
  201.     SYSDIR$ = GetWindowsSysDir()
  202.     WININI$ = "win.ini"
  203.     SYSINI$ = MakePath(WINDIR$, "system.ini")
  204.  
  205.     '' Construct the default install path
  206.     WINDRIVE$ = MID$(WINDIR$, 1, 1)
  207.     DEST$ = MakeInstDir(WINDRIVE$)
  208.  
  209.     '' Setup install symbols
  210.     BASE$ = "Base Files"
  211.     TAPPS$ = "Talking Apps"
  212.     SOUNDS$ = "Sounds"
  213.     VOICES$ = "Voices"
  214.     BASEINST$ = "Base Files Inst"
  215.     TAPPSINST$ = "Talking Apps Inst"
  216.     SOUNDSINST$ = "Sounds Inst"
  217.     VOICESINST$ = "Voices Inst"
  218.  
  219.     SetSymbolValue BASE$, ""
  220.     SetSymbolValue TAPPS$, ""
  221.     SetSymbolValue SOUNDS$, ""
  222.     SetSymbolValue VOICES$, ""
  223.  
  224.     ''Set up symbols for the initial install dialog
  225.     RADIODEFAULT$ = "Radio Default"
  226.  
  227.     ''Set up symbols for the custom install dialog
  228.     CHECKSTATES$ = "CheckItemsState"
  229.     STATUSTEXT$  = "StatusItemsText"
  230.     DRIVETEXT$   = "DriveStatusText"
  231.     FOR i% = 1 TO 4 STEP 1
  232.     AddListItem CHECKSTATES$, "ON"
  233.     NEXT i%
  234.     FOR i% = 1 TO 4 STEP 1
  235.     AddListItem STATUSTEXT$, ""
  236.     NEXT i%
  237.     FOR i% = 1 TO 7 STEP 1
  238.     AddListItem DRIVETEXT$, ""
  239.     NEXT i%
  240.     ReplaceListItem DRIVETEXT$, 7, DEST$
  241.  
  242.     ''Disk cost list symbols
  243.     BASENEEDS$   = "BaseNeeds"
  244.     TAPPNEEDS$   = "TAppNeeds"
  245.     SOUNDNEEDS$  = "SoundNeeds"
  246.     VOICENEEDS$  = "VoiceNeeds"
  247.     EXTRACOSTS$  = "ExtraCosts"
  248.     FOR i% = 1 TO 26 STEP 1
  249.     AddListItem EXTRACOSTS$, "0"
  250.     NEXT i%
  251.  
  252.     '' Locate sounds for install
  253.     INSTSNDDIR$ = MakePath(GetSymbolValue("STF_SRCDIR"), "sounds\install")
  254.  
  255.     ''Configure lists of installable files
  256.     AddInfSectionNames BASE$, TAPPS$, SOUNDS$, VOICES$, BASEINST$, TAPPSINST$, SOUNDSINST$, VOICESINST$
  257.  
  258. '$IFDEF DEBUG
  259.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  260. '$ENDIF ''DEBUG
  261.  
  262.  
  263. '' Display Welcome dialog
  264. WELCOME:
  265.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "wfsmsg.wav"), 3)
  266.  
  267.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  268.     
  269.     IF sz$ = "EXIT" THEN
  270.     GOSUB ASKQUIT
  271.     GOTO WELCOME
  272.     ELSEIF sz$ = "CONTINUE" THEN
  273.     UIPop 1
  274.     GOTO WHICHINST
  275.     END IF
  276.     GOTO WELCOME
  277.  
  278.  
  279. '' See if users want an easy install, custom install, or no install...
  280. WHICHINST:
  281.     SetSymbolValue "RadioDefault", DEFINSTOPT$
  282.     sz$ = UIStartDlg(CUIDLL$, WHICHINST, "FRadioDlgProc", WHICHINSTHLP, HELPPROC$)
  283.     
  284.     ''sz$ is the button the user pressed; RADIODEFAULT$ is the option selected
  285.  
  286.     IF sz$ = "EXIT" THEN
  287.     GOSUB ASKQUIT
  288.     GOTO WHICHINST
  289.     ELSEIF sz$ = "CONTINUE" THEN
  290.     sz$ = GetSymbolValue("ButtonChecked")
  291.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "ifsure.wav"), 2)
  292.     IF sz$ = "1" THEN
  293.         UIPop 1
  294.         CUSTINSTALL% = 0
  295.         GOTO CUSTOMIZE
  296.     ELSEIF sz$ = "2" THEN
  297.         UIPop 1
  298.         CUSTINSTALL% = -1
  299.         GOTO CUSTOMIZE
  300.     ELSEIF sz$ = "3" THEN
  301.         DoUninstall
  302.         GOTO WHICHINST
  303.     END IF
  304.     END IF
  305.     GOTO WHICHINST
  306.  
  307.  
  308. '' Customize the copy of the product
  309. CUSTOMIZE:
  310.     IF NOT CUSTOMIZE% THEN
  311.     GOTO SOUNDTEST
  312.     END IF
  313.  
  314.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "onechoic.wav"), 3)
  315.  
  316.     sz$ = UIStartDlg(CUIDLL$, SETOWNER, "FNameOrgDlgProc", WHICHINSTHLP, HELPPROC$)
  317.  
  318.     IF sz$ = "EXIT" THEN
  319.     GOSUB ASKQUIT
  320.     GOTO CUSTOMIZE
  321.     ELSEIF sz$ = "CONTINUE" THEN
  322.     OWNER$ = GetSymbolValue("NameOut")
  323.     WORKPLACE$ = GetSymbolValue("OrgOut")
  324.     UIPop 1
  325.     GOTO SOUNDTEST
  326.     ELSEIF sz$ = "BACK" THEN
  327.     UIPop 1
  328.     GOTO WHICHINST
  329.     END IF
  330.     GOTO CUSTOMIZE
  331.  
  332.  
  333. '' Test the sound system
  334. SOUNDTEST:
  335.     IF NOT DOTEST% THEN
  336.     GOTO DOINST
  337.     END IF
  338.  
  339.     sz$ = UIStartDlg(CUIDLL$, TESTSOUND, "FInfoDlgProc", WHICHINSTHLP, HELPPROC$)
  340.  
  341.     IF sz$ = "EXIT" THEN
  342.     GOSUB ASKQUIT
  343.     GOTO SOUNDTEST
  344.     ELSEIF sz$ = "CONTINUE" THEN
  345.     UIPop 1
  346.     IF HasSoundDriver() THEN
  347.         GOTO DOINST
  348.     ELSE
  349.         GOTO INSTDSOUND
  350.     END IF
  351.     ELSEIF sz$ = "BACK" THEN
  352.     UIPop 1
  353.     GOTO CUSTOMIZE
  354.     ELSEIF sz$ = "TEST" THEN
  355.     w$ = MakePath(INSTSNDDIR$, "makeday.wav")
  356.     res% = sndPlaySound(w$, 2)
  357.     UIPop 1
  358.     GOTO DIDPLAY
  359.     END IF
  360.     GOTO SOUNDTEST
  361.  
  362.  
  363. '' Did the sound play?
  364. DIDPLAY:
  365.     sz$ = UIStartDlg(CUIDLL$, SOUNDPLAYED, "FInfoDlgProc", WHICHINSTHLP, HELPPROC$)
  366.  
  367.     IF sz$ = "EXIT" THEN
  368.     GOSUB ASKQUIT
  369.     GOTO DIDPLAY
  370.     ELSEIF sz$ = "YES" THEN
  371.     UIPop 1
  372.     GOTO DOINST
  373.     ELSEIF sz$ = "NO" THEN
  374.     UIPop 1
  375.     GOTO INSTDSOUND
  376.     ELSEIF sz$ = "BACK" THEN
  377.     UIPop 1
  378.     GOTO SOUNDTEST
  379.     END IF
  380.     GOTO DIDPLAY
  381.  
  382.  
  383. '' Install DSOUND
  384. INSTDSOUND:
  385.     sz$ = UIStartDlg(CUIDLL$, INSTALLDRV, "FInfoDlgProc", WHICHINSTHLP, HELPPROC$)
  386.  
  387.     IF sz$ = "EXIT" THEN
  388.     GOSUB ASKQUIT
  389.     GOTO INSTDSOUND
  390.     ELSEIF sz$ = "INSTALL" THEN
  391.     UIPop 1
  392.     INSTDSOUND% = -1
  393.     GOTO DOINST
  394.     ELSEIF sz$ = "CONTINUE" THEN
  395.     UIPop 1
  396.     GOTO DOINST
  397.     ELSEIF sz$ = "BACK" THEN
  398.     UIPop 1
  399.     GOTO DIDPLAY
  400.     END IF
  401.     GOTO INSTDSOUND
  402.  
  403.  
  404. '' Do the appropriate type of install
  405. DOINST:
  406.     IF CUSTINSTALL% THEN
  407.     GOTO CUSTINST
  408.     END IF
  409.     '' else fall-thru
  410.  
  411. ''Perform a default installation (of all files and options)
  412. DEFINST:
  413.     RecalcPath
  414.     SetDriveStatus
  415.  
  416. GETDEFINSTPATH:
  417.     GOSUB GETPATH
  418.  
  419.     IF sz$ = "CONTINUE" THEN
  420.     ''Install only if it will fit.
  421.     IF FITS% > 0 THEN
  422.         GOSUB TOOBIG
  423.         GOTO GETDEFINSTPATH
  424.     END IF
  425.     UIPop 1
  426.     GOTO INSTALL
  427.     ELSEIF sz$ = "BACK" THEN
  428.     GOTO WHICHINST
  429.     END IF
  430.     GOTO GETDEFINSTPATH
  431.  
  432.  
  433. ''Perform a custom installation (let user choose files, etc)
  434. CUSTINST:
  435.     RecalcPath
  436.     SetDriveStatus
  437.  
  438.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "lucky.wav"), 3)
  439.  
  440. CUSTINSTDLG:
  441.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  442.  
  443.     IF sz$ = "CONTINUE" THEN
  444.     ''Install only if it will fit.
  445.     IF FITS% > 0 THEN
  446.         GOSUB TOOBIG
  447.         GOTO CUSTINSTDLG
  448.     END IF
  449.     UIPop 1
  450.     GOTO INSTALL
  451.     ELSEIF sz$ = "PATH" THEN
  452.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "areusure.wav"), 3)
  453.     GOSUB GETPATH
  454.     GOTO CUSTINSTDLG
  455.     ELSEIF sz$ = "CHK1" THEN
  456.     RecalcOptFiles BASEFILES
  457.     SetDriveStatus
  458.     GOTO CUSTINSTDLG
  459.     ELSEIF sz$ = "CHK2" THEN
  460.     RecalcOptFiles TAPPFILES
  461.     SetDriveStatus
  462.     GOTO CUSTINSTDLG
  463.     ELSEIF sz$ = "CHK3" THEN
  464.     RecalcOptFiles SOUNDFILES
  465.     SetDriveStatus
  466.     GOTO CUSTINSTDLG
  467.     ELSEIF sz$ = "CHK4" THEN
  468.     RecalcOptFiles VOICEFILES
  469.     SetDriveStatus
  470.     GOTO CUSTINSTDLG
  471.     ELSEIF sz$ = "BTN2" THEN
  472.     GOTO TAPPFILES
  473.     ELSEIF sz$ = "BTN3" THEN
  474.     GOTO SOUNDFILES
  475.     ELSEIF sz$ = "BTN4" THEN
  476.     GOTO VOICEFILES
  477.     ELSEIF sz$ = "EXIT" THEN
  478.     GOSUB ASKQUIT
  479.     GOTO CUSTINST
  480.     END IF
  481.     GOTO CUSTINSTDLG
  482.  
  483.  
  484. INSTALL:
  485.     SetRestartDir DEST$
  486.     ClearCopyList
  487.  
  488.     AddOptFiles
  489.  
  490.     AddBillboards
  491.  
  492.     CreateDir DEST$, cmoNone
  493.  
  494.     UIPopAll
  495.  
  496.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "register.wav"), 3)
  497.  
  498.     ''Do the copyn'
  499.     SetCopyGaugePosition 10, 135
  500.     CopyFilesInCopyList
  501.  
  502.     ''Back up SYSTEM.INI and WIN.INI
  503.     CopyFile MakePath(WINDIR$, WININI$), MakePath(WINDIR$, "WIN.BAK"), cmoOverwrite, 0
  504.     CopyFile SYSINI$, MakePath(WINDIR$, "SYSTEM.BAK"), cmoOverwrite, 0
  505.  
  506.     '' Configure the installed applications
  507.     ConfigureApps
  508.  
  509.     ''See if we need to restart Windows to finish installing system files which may be in use
  510.     IF RestartListEmpty() = 0 THEN
  511.     i% = DoMsgBox("Certain system files that Setup needs to install are currently in use." + "  Please close all other applications and press OK.  Setup will exit Windows, install these files, and restart Windows.", WFSAPP$ + " Setup", MB_OK)
  512.     i% = ExitExecRestart()
  513.     END IF
  514.  
  515. QUIT:
  516.     ON ERROR GOTO ERRQUIT
  517.  
  518.     IF ERR = 0 THEN
  519.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "regterm.wav"), 3)
  520.     dlg% = EXITREBOOT
  521.     ELSEIF ERR = STFQUIT THEN
  522.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "makecall.wav"), 3)
  523.     dlg% = EXITQUIT
  524.     ELSE
  525.  
  526. '$IFNDEF DEBUG
  527.     RESUME NEXT
  528. '$ELSE
  529.     dlg% = EXITFAILURE
  530. '$ENDIF
  531.  
  532.     END IF
  533. QUITL1:
  534.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  535.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "hasta.wav"), 2)
  536.     IF sz$ = "REACTIVATE" THEN
  537.     GOTO QUITL1
  538.     END IF
  539.     UIPop 1
  540.  
  541. DONEFINIFIN:
  542.     Ctl3dUnregister(HCUI%)
  543.     END
  544.  
  545. ERRQUIT:
  546.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "makecall.wav"), 3)
  547.     i% = DoMsgBox("Setup sources were corrupted, call Aristosoft at (510) 426-5355!", "Setup Error", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  548.     Ctl3dUnregister(HCUI%)
  549.     END
  550.  
  551.  
  552.  
  553. GETPATH:
  554.     SetSymbolValue "EditTextIn", DEST$
  555.     SetSymbolValue "EditFocus", "END"
  556. GETPATHL1:
  557.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  558.  
  559.     IF sz$ = "CONTINUE" THEN
  560.     olddest$ = DEST$
  561.     DEST$ = GetSymbolValue("EditTextOut")
  562.  
  563.     ''Validate new path.
  564.     IF IsDirWritable(DEST$) = 0 THEN
  565.         GOSUB BADPATH
  566.         GOTO GETPATHL1
  567.     END IF
  568.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "nicedriv.wav"), 3)
  569.     UIPop 1
  570.  
  571.     ''Truncate display if too long.
  572.     IF LEN(DEST$) > 23 THEN
  573.         ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  574.     ELSE
  575.         ReplaceListItem DRIVETEXT$, 7, DEST$
  576.     END IF
  577.  
  578.     ''Recalc if path changed.
  579.     IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  580.         RecalcPath
  581.         SetDriveStatus
  582.     END IF
  583.  
  584.     olddest$ = ""
  585.     RETURN
  586.     ELSEIF sz$ = "EXIT" THEN
  587.     GOSUB ASKQUIT
  588.     GOTO GETPATHL1
  589.     ELSEIF sz$ = "BACK" THEN
  590.     UIPop 1
  591.     RETURN
  592.     END IF
  593.     GOTO GETPATHL1
  594.  
  595.  
  596. TAPPFILES:
  597.     SetSymbolValue "ListItemsIn", GetSymbolValue(TAPPS$)
  598.     SetSymbolValue "ListItemsOut", GetSymbolValue(TAPPSINST$)
  599. TAPPF:
  600.     sz$ = UIStartDlg(CUIDLL$, TAPPSDLG, "FMultiDlgProc", APPHELP, HELPPROC$)
  601.  
  602.     IF sz$ = "CONTINUE" THEN
  603.     UIPop 1
  604.     SetSymbolValue TAPPSINST$, GetSymbolValue("ListItemsOut")
  605.     RecalcOptFiles TAPPFILES
  606.     SetDriveStatus
  607.     GOTO CUSTINSTDLG
  608.     ELSEIF sz$ = "EXIT" THEN
  609.     GOSUB ASKQUIT
  610.     GOTO TAPPF
  611.     ELSE '' Back...
  612.     UIPop 1
  613.     GOTO CUSTINSTDLG
  614.     END IF
  615.     GOTO TAPPF
  616.  
  617.  
  618. SOUNDFILES:
  619.     SetSymbolValue "ListItemsIn", GetSymbolValue(SOUNDS$)
  620.     SetSymbolValue "ListItemsOut", GetSymbolValue(SOUNDSINST$)
  621. SOUNDF:
  622.     sz$ = UIStartDlg(CUIDLL$, SOUNDSDLG, "FMultiDlgProc", APPHELP, HELPPROC$)
  623.  
  624.     IF sz$ = "CONTINUE" THEN
  625.     UIPop 1
  626.     SetSymbolValue SOUNDSINST$, GetSymbolValue("ListItemsOut")
  627.     RecalcOptFiles SOUNDFILES
  628.     SetDriveStatus
  629.     GOTO CUSTINSTDLG
  630.     ELSEIF sz$ = "EXIT" THEN
  631.     GOSUB ASKQUIT
  632.     GOTO SOUNDF
  633.     ELSE '' Back...
  634.     UIPop 1
  635.     GOTO CUSTINSTDLG
  636.     END IF
  637.     GOTO SOUNDF
  638.  
  639.  
  640. VOICEFILES:
  641.     SetSymbolValue "ListItemsIn", GetSymbolValue(VOICES$)
  642.     SetSymbolValue "ListItemsOut", GetSymbolValue(VOICESINST$)
  643. VOICEF:
  644.     sz$ = UIStartDlg(CUIDLL$, VOICESDLG, "FMultiDlgProc", APPHELP, HELPPROC$)
  645.  
  646.     IF sz$ = "CONTINUE" THEN
  647.     UIPop 1
  648.     SetSymbolValue VOICESINST$, GetSymbolValue("ListItemsOut")
  649.     RecalcOptFiles VOICEFILES
  650.     SetDriveStatus
  651.     GOTO CUSTINSTDLG
  652.     ELSEIF sz$ = "EXIT" THEN
  653.     GOSUB ASKQUIT
  654.     GOTO VOICEF
  655.     ELSE '' Back...
  656.     UIPop 1
  657.     GOTO CUSTINSTDLG
  658.     END IF
  659.     GOTO VOICEF
  660.  
  661.  
  662. TOOBIG:
  663.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  664.     UIPop 1
  665.     RETURN
  666.  
  667.  
  668.  
  669. BADPATH:
  670.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  671.     UIPop 1
  672.     RETURN
  673.  
  674.  
  675. ASKQUIT:
  676.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "nothapn.wav"), 3)
  677.  
  678.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  679.  
  680.     IF sz$ = "EXIT" THEN
  681.     UIPopAll
  682.     ERROR STFQUIT
  683.     ELSEIF sz$ = "REACTIVATE" THEN
  684.     GOTO ASKQUIT
  685.     ELSE
  686.     UIPop 1
  687.     END IF
  688.     RETURN
  689.  
  690.  
  691. ''Recalculate space based on install options...
  692. SUB RecalcOptFiles (ftype%) STATIC
  693.  
  694.     CursorSave% = ShowWaitCursor()
  695.  
  696.     sz$ = UIStartDlg(CUIDLL$, WAITDLG, "FModelessDlgProc", APPHELP, HELPPROC$)
  697.  
  698.     ClearCopyList
  699.  
  700.     AddOptFilesToCopyList ftype%
  701.  
  702.     fExtra% = 0
  703.     IF ftype% = BASEFILES THEN
  704.     ListSym$ = BASENEEDS$
  705.     IF GetListItem(CHECKSTATES$, BASEFILES) = "ON" THEN
  706.         ''Add extra cost to Windows drive for ini/progman/pointers
  707.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  708.         ReplaceListItem EXTRACOSTS$, ndrive%, "2097152"
  709.         fExtra% = 1
  710.     END IF
  711.     ELSEIF ftype% = TAPPFILES THEN
  712.     ListSym$ = TAPPNEEDS$
  713.     ELSEIF ftype% = SOUNDFILES THEN
  714.     ListSym$ = SOUNDNEEDS$
  715.     ELSEIF ftype% = VOICEFILES THEN
  716.     ListSym$ = VOICENEEDS$
  717.     END IF
  718.  
  719.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  720.  
  721.     cost& = 0
  722.     FOR i% = 1 TO 26 STEP 1
  723.     cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  724.     NEXT i%
  725.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  726.  
  727.     IF fExtra% THEN
  728.     ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  729.     END IF
  730.  
  731.     UIPop 1
  732.  
  733.     RestoreCursor CursorSave%
  734.  
  735.     ListSym$ = ""
  736. END SUB
  737.  
  738.  
  739. ''Make path from dir and szFile; add \  as needed
  740. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  741.     IF szDir$ = "" THEN
  742.     MakePath = szFile$
  743.     ELSEIF szFile$ = "" THEN
  744.     MakePath = szDir$
  745.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  746.     MakePath = szDir$ + szFile$
  747.     ELSE
  748.     MakePath = szDir$ + "\" + szFile$
  749.     END IF
  750. END FUNCTION
  751.  
  752.  
  753. '' Return true if the given string is in the symbol's list
  754. FUNCTION StringInList (s$, y$) STATIC AS INTEGER
  755.     l% = GetListLength(y$)
  756.     FOR i% = 1 TO l
  757.     IF s$ = GetListItem(y$, i%) THEN
  758.         StringInList = -1
  759.         GOTO DONE
  760.     END IF
  761.     NEXT i%
  762.     StringInList = 0
  763. DONE:
  764. END FUNCTION
  765.  
  766.  
  767. ''Get Windows version in a useful way
  768. FUNCTION GetWindowsVersionCorrectly& () STATIC
  769.     GetWindowsVersionCorrectly = GetWindowsMajorVersion() * 256 + GetWindowsMinorVersion()
  770. END FUNCTION
  771.  
  772.  
  773. '' Turn x, y into a major.minor version long
  774. FUNCTION MakeVer& (x as integer, y as integer) STATIC
  775.     MakeVer = x * 256 + y
  776. END FUNCTION
  777.  
  778.  
  779. '' Remove all files in the given .INF section
  780. SUB RemoveSectionFiles (dest$, sect$) STATIC
  781.     foo$ = "foo"
  782.     MakeListFromSectionFilename foo$, sect$
  783.     l% = GetListLength(foo$)
  784.     FOR i% = 1 TO l% STEP 1
  785.     RemoveFile MakePath(dest$, GetListItem(foo$, i%)), cmoForce
  786.     NEXT i%
  787.     foo$ = ""
  788. END SUB
  789.  
  790.  
  791. '' Remove directory and all files in it, if it exists
  792. SUB RemDirectory(d$) STATIC
  793.     IF Exists(MakePath(d$, "NUL")) THEN
  794.     Kill MakePath(d$, "*.*")
  795.     RmDir d$
  796.     END IF
  797. END SUB
  798.  
  799.  
  800. '' Return True (-1) if the user has a sound driver in the [drivers]
  801. ''  section of win.ini.
  802. FUNCTION HasSoundDriver() STATIC AS INTEGER
  803.     r% = 0
  804.     IF GetIniKeyString(SYSINI$, "drivers", "wave") <> "" THEN
  805.     r% = -1
  806.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave1") <> "" THEN
  807.     r% = -1
  808.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave2") <> "" THEN
  809.     r% = -1
  810.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave3") <> "" THEN
  811.     r% = -1
  812.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave4") <> "" THEN
  813.     r% = -1
  814.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave5") <> "" THEN
  815.     r% = -1
  816.     END IF
  817.     HasSoundDriver = r%
  818. END FUNCTION
  819.  
  820. '' Include product-specific function definitions
  821. '$INCLUDE 'specific.inc'
  822.